package org.papervision3d.events
{
	import flash.events.Event;
	
	/**
	* <span lang="ja">アニメーションエンジンによってイベントが発生した場合に AnimationEvent オブジェクトが送出されます。</span>
	* <span lang="en">The AnimationEvent class represents events that are dispatched by the animation engine.</span>
	*/
	public class AnimationEvent extends Event
	{
		/**
		 * アニメーションが完了した場合の type プロパティ値を定義します。
		 */
		public static const COMPLETE 		:String = "animationComplete";
		
		/**
		 * アニメーションが失敗した場合の type プロパティ値を定義します。
		 */
		public static const ERROR    		:String = "animationError";
		
		/**
		 * アニメーションが次のフレームに進行した場合の type プロパティ値を定義します。
		 */
		public static const NEXT_FRAME		:String = "animationNextFrame";
		
		/**
		 * アニメーションが開始した場合の type プロパティ値を定義します。
		 */
		public static const START			:String = "animationStart";
		
		/**
		 * アニメーションが停止した場合の type プロパティ値を定義します。
		 */
		public static const STOP			:String = "animationStop";
		
		/**
		 * アニメーションが一時停止した場合の type プロパティ値を定義します。
		 */
		public static const PAUSE			:String = "animationPause";
		
		/**
		 * アニメーションが一時停止から再開した場合の type プロパティ値を定義します。
		 */
		public static const RESUME			:String = "animationResume";
		
		public var time :Number;
		public var clip :String;	
		public var data :Object;

		/**
		 * <span lang="ja">新しい AnimationEvent インスタンスを作成します。</span>
		 * @param	type			AnimationEvent.type としてアクセス可能なイベントタイプです。
		 * @param	time
		 * @param	clip
		 * @param	data
		 * @param	bubbles			AnimationEvent インスタンスがイベントフローのバブリング段階で処理されるかどうかを判断します。デフォルト値は false です。
		 * @param	cancelable		AnimationEvent インスタンスがキャンセル可能かどうかを判断します。デフォルト値は false です。
		 */
		public function AnimationEvent( type:String, time:Number, clip:String="", data:Object = null, bubbles:Boolean=false, cancelable:Boolean=false)
		{
			super( type, bubbles, cancelable );
			this.time = time;
			this.clip = clip;
			this.data = data;
		}
		
		/**
		 * <span lang="ja">AnimationEvent インスタンスのコピーを作成して、各プロパティの値を元のプロパティの値と一致するように設定します。</span>
		 * 
		 * @return
		 * <span lang="ja">元のオブジェクトと同じプロパティ値を含む新しい AnimationEvent インスタンスです。</span>
		 */
		override public function clone():Event
		{
			return new AnimationEvent(type, time, clip, data, bubbles, cancelable);
		}
	}
}